feat(skillhub): connect clients to Cindy SkillHub - #3682
Conversation
Signed-off-by: xd-bobo <caojianbo@xd.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
| Filename | Overview |
|---|---|
| apps/desktop/src/main/skillhub/hubApi.ts | SkillHub 已切换到新 endpoint,但缺失可选字段时未实现声明的禁用语义。 |
| packages/maker-shared/src/clientEndpoints.ts | 新 endpoint 被加入共享可选字段及协议校验,兼容旧 manifest,但空值需要由消费者处理。 |
| apps/desktop/src/main/skillhub/infoMapping.ts | 新字段已在主进程映射,但 renderer 数据契约与展示路径未完整衔接。 |
| apps/desktop/src/renderer/features/skillhub/lib/marketAccess.ts | 客户端组织白名单按设计移除,主进程仍保留云账号 capability 门禁。 |
| scripts/shared/endpoint-local-file.mjs | 本地 endpoint 生成器正确同时保留旧 SkillHub 地址并加入新服务地址。 |
| config/endpoint.json | CN manifest 为新版客户端配置独立 SkillHub 域名并保持旧地址不变。 |
| config/endpoint.global.json | Global manifest 为新版客户端配置独立 SkillHub 域名并保持旧地址不变。 |
Sequence Diagram
sequenceDiagram
participant U as 登录用户
participant R as Desktop Renderer
participant M as Electron Main
participant E as Endpoint Manifest
participant H as Cindy SkillHub
U->>R: 打开 SkillHub 市场
R->>M: listMarket / info
M->>E: 读取 cindySkillHubApiBaseUrl
alt endpoint 已配置
M->>H: 携带 Bearer 请求
H-->>M: Skill 数据与可见性结果
M-->>R: 映射后的市场数据
else endpoint 缺失
M-->>M: 当前实现以空 baseUrl 构造请求
M-->>R: NETWORK_ERROR
end
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/main/skillhub/hubApi.ts:23
**缺失端点仍发起请求**
当 endpoint manifest 不含可选的 `cindySkillHubApiBaseUrl` 时,共享 parser 会将其解析为 `''`,这里仍把空值作为 `baseUrl` 传给 `serverApiFetch`,从而构造 `/api/skills-hub/...` 相对地址并返回网络错误,而不是按约定关闭云端 SkillHub。
### Issue 2
apps/desktop/src/main/skillhub/infoMapping.ts:51-54
**新增字段未完整透传**
当新服务返回 `icon`、`tags` 或 `githubUrl` 时,主进程虽然在这里完成映射,但 renderer 的 IPC 类型和 view model 没有完整声明或转发这些字段,现有组件也未消费它们,导致图标未显示且标签和 GitHub 地址在界面边界被丢弃。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "feat(skillhub): connect clients to Cindy..." | Re-trigger Greptile
Signed-off-by: xd-bobo <caojianbo@xd.com>
|
@xd-bobo 👋 这个 PR 还有 2 条 review conversation 没 resolve(apps/desktop/src/main/skillhub/hubApi.ts / apps/desktop/src/main/skillhub/infoMapping.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。 如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。 |
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
|
命中 UI 路径(apps/desktop/src/renderer/features/skillhub/SkillhubHomeView.tsx / apps/desktop/src/renderer/features/skillhub/SkillhubMarketListView.tsx / apps/desktop/src/renderer/features/skillhub/hooks/useMarketList.ts 等)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范 |
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
|
补充状态:Greptile 提出的两条 P1 已在 |
|
@codex review |
|
To use Codex here, create a Codex account and connect to github. |
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
Signed-off-by: xd-bobo <caojianbo@xd.com>
MagicLizi
left a comment
There was a problem hiding this comment.
代码重审通过:当前 head 未发现 P0/P1。新客户端只走 cindySkillHubApiBaseUrl,旧 skillhubApiBaseUrl 锁定给已发布客户端;写路径有登录/可见性校验;registry catalogScope 为追加迁移。UI 证据未附,不阻断。
|
合了。新客户端接到独立 Skill Hub,旧地址还锁给已发布版本,迁移路径也交代清楚——这层拆得干净。 |
这次改了什么
摘要
为新版 Cindy 客户端增加独立的
cindySkillHubApiBaseUrl,让 Skill Hub 只连接新的 Cindy Skill Hub 服务。旧skillhubApiBaseUrl及国内/国际地址保持不变,已发布客户端继续连接xd-skill-hub-server。公开和组织目录只传通用的
scope=market|team,并把该 scope 贯穿详情、文件、版本、扫描、下载、安装、Learn 和批量同步。旧 registry 中尚未记录 scope 的历史 XD 安装会一次性迁移为team;新原生管理记录使用迁移标记保留省略 scope 的语义,同 slug 的不同目录不会串数据。客户端按新服务契约提交作者标签名称,并排除 Platform 治理标签;管理操作使用服务端逐 Skill 返回的
canManage,不再用组织归属isMine推导权限。从组织目录编辑时会独立查询原生写入目标,正确区分首发和升级。未登录用户可以浏览公开 Skill,但不会看到不可执行的更新入口。组织 Skill 的归属仍显示组织,实际提交当前版本的成员通过
publisherName单独展示;服务端写入发布者快照的配套修复见 xindong/cindy-server#562。不支持的组织可见性由服务端返回INVALID_VISIBILITY,客户端显示可操作提示。同时完善 Desktop Skill Hub 的公开、组织、本地技能和我的管理导航、分页、Skill 图标、文件详情以及扫描/人工审核状态;机审通过后显示“等待审核”并停止持续轮询。
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
cindy-skill-hub-server服务端实现、线上基础设施部署、旧xd-skill-hub-server下线UI 变化
顶部统一使用“技能”,目录通过
公开 / 组织(有组织时)/ 本地技能 / 我的管理 / 更多切换。公开审核使用“提交审核 / 等待审核 / 审核未通过”状态,不再提示用户发布新版本。组织身份不会因为客户端预检隐藏发布入口,实际请求失败时展示接口错误。组织 Skill 的卡片与详情显示“实际发布人 · 归属组织”。docs/design-rules/DESIGN.md的语义色、图标、圆角、字号、Light/Dark 和交互状态约束;复用已有主题 token、组件与 Lucide 图标,已同步五种语言。怎么验证的
自动验证
说明:本地
.env为 CN 开发运行配置,首次未覆盖区域运行门禁时,两份固定 Global 预期的测试分别按 CN 品牌目录和 CNY 汇率执行而失败;未修改本地.env,以仅作用于测试进程的VITE_CINDY_AUTH_REGION=global重跑后完整门禁通过。手工验证
macOS CN 开发模式此前已通过标准启动器连接新 Skill Hub endpoint,确认公开列表、默认 Skill 图标和本地发布链路不回退线上旧 endpoint。本次最终增量以类型检查、定向测试和完整相关门禁验证目录作用域、组织管理权限、标签及发布者映射。
未执行的验证
未执行 Windows/Linux 实机 UI 验证,也未对最新提交再次做完整 Light/Dark 人工目检;本次样式复用已有语义 token,类型检查和相关测试均已通过。
风险
风险分类
影响与回滚
catalogScope和迁移标记,旧客户端会忽略未知字段skillhubApiBaseUrl保持锁定,已发布客户端继续连接旧服务;新版只使用cindySkillHubApiBaseUrl。新客户端与新服务尚未发布,因此同步收紧当前中间契约,不增加无消费者的 fallback提交前检查
git commit -s,见 DCO)